package 面试;

public class 实现四则运算 {

    // 加法：
    public int add(int a, int b) {
        int res = a;
        int xor = a ^ b; // 得到原位和【异或】
        int forward = (a & b) << 1; // 得到进位和
        // 若进位和不为0，则递归求原位和+进位和
        if (forward != 0) {
            res = add(xor, forward);
        } else {
            res = xor; // 若进位和为0，则此时原位和为所求和
        }
        return res;
    }

    // 减法
    public int minus(int a,int b) {
        b = add(~b, 1);
        return add(a, b);
    }

    // 乘法
    public int multi(int a, int b) {
        int i = 0;
        int res = 0;
        while (b != 0) {//乘数为0则结束
            //处理乘数当前位
            if ((b & 1) == 1) {
                res += (a << i);
                b = b >> 1;
                ++i;//i记录当前位是第几位
            } else {
                b = b >> 1;
                ++i;
            }
        }
        return res;
    }

    // 除法
    public int sub(int a, int b) {
        int res = -1;
        if (a < b) {
            return 0;
        } else {
            res = sub(minus(a, b), b) + 1;
        }
        return res;
    }

}
